給定兩個字串 s 和 t,判斷 t 是否為 s 的Anagram。
Anagram 是指兩個字串中出現的字母相同,且每個字母的出現次數也相同,但順序可以不同。
簡單解法:
class Solution:
def isAnagram(self, s: str, t: str) -> bool:
return sorted(s) == sorted(t)
使用hashmap的解法:
class Solution:
def isAnagram(s: str, t: str) -> bool:
# 如果兩字串長度不一致,直接回傳 False
if len(s) != len(t):
return False
# 創建一個字典來記錄字母次數
count = {}
# 計算 s 中每個字母的次數
for char in s:
count[char] = count.get(char, 0) + 1
# 減少 t 中每個字母的次數
for char in t:
if char in count:
count[char] -= 1
else:
return False
# 最後檢查每個字母的次數是否都為 0
for value in count.values():
if value != 0:
return False
return True
在Python中使用 Counter 更加精簡的hashmap解法
from collections import Counter
class Solution:
def isAnagram(s: str, t: str) -> bool:
return Counter(s) == Counter(t)
給定一個正整數 n,重複以下操作:
取 n 的每一位數,並將每一位數平方後相加,得到新的數字。
重複這個過程,直到該數字變為 1(即 n 是一個「快樂數」)或者無限循環(即不可能變為 1)。
如果這個過程可以變成 1,則返回 True,表示 n 是一個「快樂數」;否則返回 False。
class Solution:
def isHappy(self, n: int) -> bool:
seen = set() # 用來儲存已出現過的數字,避免無限循環
while n != 1 and n not in seen:
seen.add(n) # 將當前數字加入集合
n = sum(int(digit) ** 2 for digit in str(n)) # 計算每個位數的平方和
return n == 1 # 如果 n 最終變成 1,則返回 True,否則返回 False
解題思路
n 的每一位數字,將其平方後相加,並更新 n 的值。1),我們可以使用一個集合 seen 來記錄已經出現過的數字。n 變為 1 時,返回 True
n 重複出現在 seen 集合中時,返回 False,表示 n 進入無限循環,不是「快樂數」。